/*
 * janela.h
 *
 *  Created on: 11/11/2011
 *      Author: Felipe Almeida, João Gonçalves
 *
 *      felipe.xavier@larces.uece.br,joao.goncalves@larces.uece.br
 *
 *      Classe que encapsula a criação de uma janela em SDL
 */

#ifndef JANELA_H_
#define JANELA_H_
#include "text.h"
#include "Image.h"
#include "Monkey.h"
#include "timersdl.h"
#include "semaphore.h"
#include "statistic.h"
#include <iostream>
#include <vector>
#include <sys/time.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <cstdlib>
#define STDIN 0

#define VEL 2

using namespace std;

#define FRAMES_PER_SECOND 32

/*ponta direita da ponte*/
#define INIT_BRIDGE_RIGHT 500
/*ponta esquerda da ponte*/
#define INIT_BRIDGE_LEFT 250

/*quantidade de pixels da travessia do macaco direito até a ponta da ponte*/
#define TRAVEL_RIGHT 300
/*quantidade de pixels da travessia do macaco esquerdo até a ponta da ponte*/
#define TRAVEL_LEFT 250

#define TRAVEL_BRIDGE 250

#define MAX_CHAR 100

#define PI 3.1415927

using namespace std;

class Window;

typedef struct
{
	Window *win;
	int id;
}Header;

class Window{
	private:
		/*Largura da janela*/
		int width_;
		/*Altura da janela*/
		int height_;
		/*Ponteiro para superfície da janela(a janela em si)*/
		SDL_Surface *screen_;
		/*Superfície para imagem de plano de fundo*/
		SDL_Surface *back_;
		/*Para controlar eventos*/
		SDL_Event event_;
		/*Vetor de macacos que ainda estão em travessia (antes de receber o comando atravessando)*/
		vector <Monkey*> monksInq_;
		/*Vetor de macacos que estão espernado para atravessar a ponte e estão atravessando(após receber o comando atravessando)*/
		vector <Monkey*> monksInb_;
		/*Vetor de macacos que ja passaram pela ponte*/
		vector <Monkey*> monksInr_;
		Semaphore monMutex;
		/*Temporizador para controlar os frames*/
		Timer fps;
		/*Número de macacos da direção direita que atravessaram em sequência*/
		int babuRight_;
		/*Número de macacos da direção esquerda que atravessaram em sequência*/
		int babuLeft_;

		Statistic statistic_;

	public:
		Window(const int &width = 800, const int &height = 600);
		virtual ~Window();
		/*Atualiza alterações feitas na janela*/
		void update();
		/*Loop principal a qual o programa irá executar*/
		void loop();
		/*Imprimi um texto na tela*/
		void printText(const Text &text);

		/*Aplica um plano de fundo na janela*/
		void appBackground(const string &background);
		/*Limpa a janela deixando apenas o plano de fundo*/
		void clean();
		/*funcao chamada apos acabarem os babuinos*/
		void results();
		/*Espera dos frames*/
		void waitFps();
		/*Travessia dos macacos em direção da ponte*/
		void monkQ();
		/*Travessia do macaco na ponte(também na espera)*/
		void monkB();
		/*Travessia após a ponte*/
		void monkR();
		/*Checa as condições de travessia*/
		bool checkBridge(const int &dir, const int &pos);

		/*aplica uma superfície "source" numa superfície "destination"*/
		void apply_surface( int x, int y, SDL_Surface* source, SDL_Rect* clip = NULL );
};



#endif /* JANELA_H_ */
